/**
 * 首页控制器
 * 处理首页相关的业务逻辑
 */

const BannerService = require('../service/banner.service');
const MenuService = require('../service/menu.service');

// 创建服务实例
const bannerService = new BannerService();
const menuService = new MenuService();
class IndexController {
  /**
   * 获取轮播图列表
   * @param {Object} event - 事件对象
   * @param {Object} context - 上下文对象
   * @returns {Promise<Object>} 返回轮播图列表数据
   */
  async bannerList(event, context) {
    console.log(this.getClientInfo());
    try {
      // 通过服务层获取轮播图数据
      const banners = await bannerService.getHomeBanners();

      return {
        code: 200,
        message: '获取轮播图列表成功',
        data: {
          banners: banners
        }
      };
    } catch (error) {
      console.error('获取轮播图列表失败:', error);
      return {
        code: 500,
        message: error.message || '获取轮播图列表失败'
      };
    }
  }
  async menuList(event, context) {
    try {
      // 通过服务层获取菜单数据
      const menuList = await menuService.getHomeMenus();

      return {
        code: 200,
        message: '获取菜单列表成功',
        data: {
          menuList: menuList
        }
      };
    } catch (error) {
      console.error('获取菜单列表失败:', error);
      return {
        code: 500,
        message: '获取菜单列表失败',
        error: error.message
      };
    }
  }
  /**
   * 获取首页推荐商品
   * @param {Object} event - 事件对象
   * @param {Object} context - 上下文对象
   * @returns {Promise<Object>} 返回推荐商品数据
   */
  async getRecommendProducts(event, context) {
    // 这里可以调用产品服务获取推荐商品
    // 暂时返回空数据，后续可以完善
    return {
      code: 200,
      message: '获取推荐商品成功',
      data: {
        products: []
      }
    };
  }

  /**
   * 获取首页分类导航
   * @param {Object} event - 事件对象
   * @param {Object} context - 上下文对象
   * @returns {Promise<Object>} 返回分类导航数据
   */
  async categoryList(event, context) {
    try {
      // 可以从product.controller中复用getCategories方法
      // 或者在banner.service中添加相应的方法
      const db = uniCloud.database();
      const { data } = await db.collection('categories')
        .where({
          level: 1,
          status: 1
        })
        .orderBy('sort_order', 'asc')
        .limit(8)
        .get();

      const categories = data.map(cat => ({
        id: cat._id,
        name: cat.name,
        icon: cat.icon || '',
        link: `/pages/product/list?category_id=${cat._id}`
      }));

      return {
        code: 200,
        message: '获取分类导航成功',
        data: {
          categories: categories
        }
      };
    } catch (error) {
      console.error('获取分类导航失败:', error);
      return {
        code: 500,
        message: '获取分类导航失败',
        error: error.message
      };
    }
  }
  
  /**
   * 获取广告列表
   * @param {Object} event - 事件对象，包含位置参数pos
   * @param {Object} context - 上下文对象
   * @returns {Promise<Object>} 返回广告列表数据
   */
  async adsList(event, context) {
    try {
      const { pos = 'home' } = event;
      
      // 直接从数据库获取广告数据
      const db = uniCloud.database();
      const query = {
        status: 1
      };
      
      // 如果指定了位置，则按位置筛选
      if (pos) {
        query.position = pos;
      }
      
      // 查询广告数据，按排序字段升序排列
      const { data } = await db.collection('banners')
        .where(query)
        .orderBy('sort_order', 'asc')
        .get();
      
      // 处理广告数据，转换为前端需要的格式
      const ads = data.map(ad => ({
        id: ad._id,
        title: ad.title,
        image: ad.image,
        link: ad.link || '#',
        sortOrder: ad.sort_order
      }));
      
      return {
        code: 200,
        message: '获取广告列表成功',
        data: {
          banners: ads
        }
      };
    } catch (error) {
      console.error('获取广告列表失败:', error);
      return {
        code: 500,
        message: '获取广告列表失败',
        error: error.message
      };
    }
  }
}
module.exports = { IndexController };
